// 引入路由文件这种的公共路由
// import { constantRoutes } from '../index'
// Layout 组件是项目中的主页面，切换路由时，仅切换Layout中的组件
import Layout from '@/layout'

export function getAsyncRoutes(routes) {
	const res = []
	// 定义路由中需要的自定名
	const keys = ['path', 'name', 'children', 'pid', 'redirect', 'title', 'hidden', 'meta']
	// 遍历路由数组去重组可用的路由
	routes.forEach(item => {
		// 如果是按钮则不添加
		if (item.menu_status === '0') {
			return false
		}
		const newItem = {}
		if (item.path) {
			// 判断 item.pid 是否等于 '0'证明是顶级路由,若是则直接替换成引入的 Layout 组件
			if (item.pid == '0') {
				newItem.component = Layout
				newItem.redirect = 'noRedirect'
			} else {
				// item.component 不等于 'Layout',则说明它是组件路径地址，因此直接替换成路由引入的方法
				// 可新建一个配置文件，配置已存在的路由页面，检测 item.path 是否存在有效页面，如果不存在，重定向到404页面
				newItem.component = resolve => require([`@/views${item.path}`], resolve)
				// 此处用reqiure比较好，import引入变量会有各种莫名的错误
				// newItem.component = (() => import(`@/views/${item.component}`));
			}
		}
		for (const key in item) {
			if (keys.includes(key)) {
				if (key == 'hidden') {
					newItem[key] = item[key] == 'false' ? false : true
				} else {
					newItem[key] = item[key]
				}
			}
		}
		newItem.name = item.path.replace('/')
		newItem.meta = {
			icon: item.icon || '',
			title: item.title
		}
		// 若遍历的当前路由存在子路由，需要对子路由进行递归遍历
		if (newItem.children && newItem.children.length) {
			newItem.children = getAsyncRoutes(item.children)
		} else if (item.pid == '0') { // 如果是顶级路由且没有子级，创建一个子级访问页面
			newItem.children = [{
				path: newItem.path + '/index',
				name: newItem.path + '_child',
				component: resolve => require([`@/views${item.path}/index`], resolve),
				title: newItem.title,
				icon: newItem.icon,
				meta: {
					icon: item.icon || '',
					title: item.title
				}
			}]
		}
		res.push(newItem)
	})
	// 返回处理好且可用的路由数组
	return res
}
